﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TEL.ClientClasses.Private
{
    public class SIP_ResponseCode
    {
        private Dictionary<int, string> SipCode = new Dictionary<int, string>();

        public SIP_ResponseCode()
        {
            SipCode.Add(100, "запрос обрабатывается.");
            SipCode.Add(180,
                        "местоположение вызываемого пользователя определено. Выдан сигнал о входящем вызове.");
            SipCode.Add(181,
                        "прокси,сервер переадресует вызов к другому пользователю.");
            SipCode.Add(182,
                        "вызываемый абонент временно не доступен, вызов поставлен в очередь.");
            SipCode.Add(183,
                        "используется для того, чтобы заранее получить описание сеанса информационного обмена от шлюзов на пути к вызываемому пользователю.");
            SipCode.Add(200,
                        "успешное завершение.");
            SipCode.Add(202,
                        "запрос принят для обработки Используется для справки о состоянии обработки.");
            SipCode.Add(300,
                        "указывает несколько SIP-адресов, по которым можно найти вызываемого пользователя.");
            SipCode.Add(301,
                        "означает, что вызываемый пользователь больше не находится по адресу, указанному в запросе.");
            SipCode.Add(302,
                        "означает, что пользователь временно сменил местоположение.");
            SipCode.Add(305,
                        "означает, что вызываемый пользователь не доступен непосредственно, входящий вызов должен пройти через прокси-сервер.");
            SipCode.Add(380,
                        "запрошенная услуга недоступна, но доступны альтернативные услуги.");
            SipCode.Add(400,
                        "означает, что запрос не понят из-за синтаксических ошибок в нем.");
            SipCode.Add(401,
                        "означает, что запрос требует проведения процедуры аутентификации пользователя. Используется только регистраторами. Прокси-серверы должны использовать прокси авторизацию 407.");
            SipCode.Add(402,
                        "требуется оплата (зарезервирован для использования в будущем).");
            SipCode.Add(403,
                        "доступ запрещен.");
            SipCode.Add(404,
                        "не найдено: вызываемый пользователь не найден.");
            SipCode.Add(405,
                        "недопустимый метод.");
            SipCode.Add(406,
                        "непонятные ответы вызываемой стороны.");
            SipCode.Add(407,
                        "необходима аутентификация на прокси-сервере.");
            SipCode.Add(408,
                        "время обработки запроса истекло: Абонента не удалось найти за отведенное время.");
            SipCode.Add(410,
                        "нет доступа к ресурсу: Ресурс по указанному адресу больше не существует.");
            SipCode.Add(413,
                        "размер запроса слишком велик для обработки на сервере.");
            SipCode.Add(414,
                        "у сервера возникли трудности с интерпретацией адреса получателя из-за его длины.");
            SipCode.Add(415,
                        "сервер не может принять запрос, так как формат содержимого тела сообщения не поддерживается сервером для запроса данного типа.");
            SipCode.Add(416,
                        "сервер не может обработать запрос из-за того, что схема адреса получателя ему непонятна.");
            SipCode.Add(420,
                        "неизвестное расширение: Сервер не понял расширение протокола SIP.");
            SipCode.Add(421,
                        "в заголовке запроса не указано, какое расширение сервер должен применить для его обработки.");
            SipCode.Add(423,
                        "сервер отклоняет запрос, так как время действия ресурса короткое.");
            SipCode.Add(480,
                        "соединение с оконечной системой установлено успешно, но пользователь в данный момент недоступен.")
                ;
            SipCode.Add(481,
                        "сервер получил запрос не относящийся к текущему диалогу или транзакции.");
            SipCode.Add(482,
                        "обнаружен замкнутый маршрут передачи запроса.");
            SipCode.Add(483,
                        "запрос на своем пути прошел через большее число прокси-серверов, чем разрешено.");
            SipCode.Add(484,
                        "принят запрос с неполным адресом.");
            SipCode.Add(485,
                        "означает, что адрес вызываемого пользователя не однозначен.");
            SipCode.Add(486,
                        "означает, что вызываемый пользователь в настоящий момент занят и не желает (не может) принять входящий вызов.");
            SipCode.Add(487,
                        "запрос был отменен сообщением BYE или CANCEL.");
            SipCode.Add(488,
                        "соединение было установлено, но отдельные параметры описания сеанса связи недопустимы.");
            SipCode.Add(491,
                        "запрос поступил в то время, когда сервер еще не закончил обработку другого запроса, относящегося к тому же диалогу.");
            SipCode.Add(493,
                        "сервер не в состоянии подобрать ключ дешифрования: невозможно декодировать тело S/MIME сообщения.");
            SipCode.Add(500,
                        "означает, что сервер не имеет возможности обслужить запрос из-за внутренней ошибки.");
            SipCode.Add(501,
                        "означает, что в сервере не реализованы какие-либо функции, необходимые для обслуживания запроса: Метод запроса SIP не поддерживается.");
            SipCode.Add(502,
                        "информирует о том, что сервер, функционирующий в качестве шлюза или прокси-сервера, принимает некорректный ответ от сервера, к которому он направил запрос.");
            SipCode.Add(503,
                        "указывает, что сервер не может в данный момент обслужить вызов вследствие перегрузки или проведения технического обслуживания.");
            SipCode.Add(504,
                        "сервер не получил ответа в течение установленного промежутка времени от сервера, к которому он обратился для завершения вызова.");
            SipCode.Add(505,
                        "версия не поддерживается: Сервер не поддерживает эту версию протокола SIP.");
            SipCode.Add(513,
                        "сервер не в состоянии обработать запрос из-за большой длины сообщения.");
            SipCode.Add(600,
                        "вызываемый пользователь занят и не желает принимать вызов в данный момент.");
            SipCode.Add(603,
                        "означает, что вызываемый пользователь не желает принимать входящие вызовы, не указывая причину отказа.");
            SipCode.Add(604,
                        "означает, что вызываемого пользователя не существует.");
            SipCode.Add(606,
                        "соединение с сервером было установлено, но отдельные параметры, такие как тип запрашиваемой информации, полоса пропускания, вид адресации не допустимы.");
        }

        public string GetMessage(int code)
        {
            if (!SipCode.ContainsKey(code)) return "Неопрознанный ответ";
            return SipCode[code];
        }
    }
}
